package store

import (
	"geekai/core/types"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"gorm.io/gorm/schema"
	"time"
)

// NewGormConfig 设置gorm配置
func NewGormConfig() *gorm.Config {
	return &gorm.Config{
		// 将日志模式设置为静默Silent，禁止所有 SQL 日志输出
		Logger: logger.Default.LogMode(logger.Info),
		NamingStrategy: schema.NamingStrategy{
			// 为所有表名添加统一前缀
			TablePrefix: "chatgpt_",
			// 启用复数表名转换规则（默认行为），结构体 User 会映射为 chatgpt_users 表。
			// 若设为 true 则映射为单数形式 chatgpt_user。
			SingularTable: false,
		},
	}
}

// NewMysql 创建操作 gorm.DB 对象
func NewMysql(config *gorm.Config, appConfig *types.AppConfig) (*gorm.DB, error) {
	db, err := gorm.Open(mysql.Open(appConfig.MysqlDns), config)
	if err != nil {
		return nil, err
	}
	// 获取原生数据库连接对象
	// GORM 是对 database/sql 的封装，db.DB() 方法能返回标准库的 *sql.DB 对象，用于执行原生 SQL 或配置连接池参数
	sqlDB, err := db.DB()
	if err != nil {
		return nil, err
	}
	// 空闲连接数
	sqlDB.SetMaxIdleConns(32)
	// 最大打开连接数
	sqlDB.SetMaxOpenConns(512)
	// 连接最大存活时间
	sqlDB.SetConnMaxLifetime(time.Hour)
	return db, nil
}
